From: Keir Fraser Date: Thu, 26 Aug 2010 10:16:14 +0000 (+0100) Subject: Fix bind_irq_vector() destination X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~11570 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https:/%22bookmarks://%22Dat/%22http:/www.example.com/cgi/%22https:/%22bookmarks:/%22Dat?a=commitdiff_plain;h=128e862878c0ae8f96ed3aee7649a32e659bf0b9;p=xen.git Fix bind_irq_vector() destination The "mask" covered all online cpus in the "domain". It should be used as destination later, instead of using "domain" directly. Signed-off-by: Sheng Yang --- diff --git a/xen/arch/x86/irq.c b/xen/arch/x86/irq.c index 40c86b74fa..a6bb226eb3 100644 --- a/xen/arch/x86/irq.c +++ b/xen/arch/x86/irq.c @@ -86,14 +86,14 @@ static int __bind_irq_vector(int irq, int vector, cpumask_t domain) cpus_and(mask, domain, cpu_online_map); if (cpus_empty(mask)) return -EINVAL; - if ((cfg->vector == vector) && cpus_equal(cfg->domain, domain)) + if ((cfg->vector == vector) && cpus_equal(cfg->domain, mask)) return 0; if (cfg->vector != IRQ_VECTOR_UNASSIGNED) return -EBUSY; for_each_cpu_mask(cpu, mask) per_cpu(vector_irq, cpu)[vector] = irq; cfg->vector = vector; - cfg->domain = domain; + cfg->domain = mask; irq_status[irq] = IRQ_USED; if (IO_APIC_IRQ(irq)) irq_vector[irq] = vector;